package com.shujia.base.day02

/**
 *  scala中的继承
 *
 *  注意事项：
 *    1、子类继承父类的时候，也是使用extends关键字
 *    2、子类可以继承父类中的变量var或常量val
 *    3、子类可以重写父类中被val修饰的常量, 父类中var修饰的变量，子类中可以直接改值
 *    4、多态的调用特点和java中多态一样
 *    5、scala中的类也只能进行单继承
 */
object Demo8Class {
  def main(args: Array[String]): Unit = {
    val z1: Zi1 = new Zi1("张成阳", 18)
    println(z1)
    println(z1.a)
    println(z1.b)

    println(z1.fun1("方直在喝水"))
    println("="*50)
    //多态  父类的引用指向子类对象
    val d1:Fu1 = new Zi1("张成阳", 18)
    println( d1.fun1("xxxxxxx"))

  }
}

class Fu1(name:String) {
  val a = 100
  var b = 200

  def fun1(s:String):String={
    "数加："+s
  }
}
//子类继承父类，父类主构造方法中有成员变量，继承的时候，父类中只需要写变量，数据类型不用写
//子类属于新的一个类，需要加上数据类型
class Zi1(name:String, age:Int) extends Fu1(name){
  override val a: Int = 11
  b = 22

  override def toString: String = s"Zi1(name=${name},age=${age})"

  override def fun1(s: String): String = "33期：" + s
}

//继承父亲无参的构造方法
//class Fu1 {
//
//}
//
//class Zi1 extends Fu1 {
//
//}
